<?php

abstract class Sc_Service_Abstract
{
    /**
     * データベースへのアダプタを格納します。
     * @var Zend_Db_Adapter_Abstract データベースへのアダプタを格納します。
     */
    protected $db;

    /**
     * テーブル操作クラスを初期化するためのオプションを格納します。
     * @var array テーブル操作クラスを初期化するためのオプションを格納します。
     */
    protected $option;

    /**
     * トランザクション中かどうかを示す値を格納します。
     * @var boolean トランザクション中かどうかを示す値を格納します。
     */
    private $isInTransaction;

    /**
     * リフォームナビの管理者のメールアドレス。
     *  
     */
//    private $managerMailAddress = 'svadmin@210.233.68.41';
//    private $managerMailAddress = 'yutaro.toyoda@gmail.com';

    /**
     * リフォームナビサイトURL。
     */
//    private $frontSiteURL = 'http://210.233.68.41/Sc/Scfront/reformnavi/';


    /**
     * {@link Sc_Service_Abstract}クラスの新しいインスタンスを初期化します。
     *
     * @return void
     */
    public function __construct()
    {
        $this->db = Sc_Db_Adapter::getAdapter();
        $this->option = array(
            Zend_Db_Table_Abstract::ADAPTER => $this->db
        );

        $this->isInTransaction = FALSE;
    }

    /**
     * データベースへのアダプタを取得します。
     *
     * @return Zend_Db_Adapter_Abstract データベースへのアダプタを返します。
     */
    protected function getAdapter()
    {
        return $this->db;
    }

    /**
     * トランザクションを開始します。
     * @return void
     */
    protected function beginTransaction()
    {
        if ($this->isInTransaction == FALSE) {
            $this->db->beginTransaction();
            $this->isInTransaction = TRUE;
        }
    }

    /**
     * トランザクションを正常終了します。
     * @return void
     */
    protected function commit()
    {
        if ($this->isInTransaction == TRUE) {
            $this->db->commit();
            $this->isInTransaction = FALSE;
        }
    }

    /**
     * トランザクションをロールバックします。
     * @return void
     */
    protected function rollBack()
    {
        if ($this->isInTransaction == TRUE) {
            $this->db->rollBack();
            $this->isInTransaction = FALSE;
        }
    }

    /**
     * トランザクションが開始されているかどうかをチェックします。
     * @return boolean トランザクションが開始されている場合はTRUEを、失敗した場合は
     *                  FALSEを返します。
     */
    protected function isInTransaction()
    {
        return $this->isInTransaction;
    }
    
    /**
     * アドレスを取得する。 
     */
    protected function getManagerMailAddress()
    {
        return $this->managerMailAddress;
    }
    
    /**
     * URLを取得します。 
     */
    protected function getSiteUrl($url)
    {
        $ret = '';
        $ret = $this->frontSiteURL . $url;
        
        return $ret;
    }
}